<?php

// +----------------------------------------------------------------------
// | 队列
// +----------------------------------------------------------------------
// | Copyright (c) 2015-2024 http://www.yicmf.com, All rights reserved.
// +----------------------------------------------------------------------
// | Author: 微尘 <yicmf@qq.com>
// +----------------------------------------------------------------------

namespace app\common\event;

use app\common\model\Lang as LangModel;
use app\pay\event\UserVirtualCurrency as UserVirtualCurrencyEvent;
use think\Exception;
use think\facade\Db;
use think\facade\Lang as LangThink;
use yicmf\tools\HttpService;

class Lang extends Base
{


    protected static $lang_file = [
        'zh-cn' => [
            'db' => 'zh_cn',
            'translate' => 'zh',
            'title' => '中文包',
        ],
        'en-us' => [
            'db' => 'en_us',
            'translate' => 'en',
            'title' => 'english package',
        ],
        'ja-jp' => [
            'db' => 'ja_jp',
            'translate' => 'jp',
            'title' => '日语',
        ],
        'zh-hk' => [
            'db' => 'zh_hk',
            'translate' => 'cht',
            'title' => '繁体',
        ],
        'fr' => [
            'db' => 'fr',
            'translate' => 'fra',
            'title' => '法语',
        ],
    ];

//		public static function get($name)
//		{
//			if (LangThink::has($name)) {
//				return LangThink::get($name);
//			} else {
//				$model = LangModel::where('name', $name)->cache(60)->where('status', 1)->find();
//				if (!$model) {
//					// 引入翻译
//					$translate = self::translate($name, 'zh', 'en');
//					if ($translate['code'] == 200 && isset($translate['content']['trans_result'])) {
//						$insert['name'] = $name;
//						$insert['zh_cn'] = $name;
//						$insert['en_us'] = $translate['content']['trans_result'][0]['dst'];
//						$model = LangModel::create($insert);
//					}
//				}
//				if ($model) {
//					if (app('lang')->getLangSet() == 'zh-cn') {
//						return $model['zh_cn'];
//					} elseif (app('lang') == 'en-us') {
//						return $model['en_us'];
//					}
//				}
//			}
//			// 默认不翻译
//			return $name;
//		}

    public static function translate($query, $from, $to)
    {


//			define("APP_ID", "20211107000993494"); //替换为您的APPID
//			define("SEC_KEY", "W4RgSv1nB4rq5G9SPiS9");//替换为您的密钥
        $appID = '20210103000662228';
        $secKey = 'XVN8rZ6Iy3N6f2TlKIXH';
        $args = [
            'q' => $query,
            'appid' => $appID,
            'salt' => rand(10000, 99999),
            'from' => $from,
            'to' => $to
        ];
        $args['sign'] = md5($appID . $query . $args['salt'] . $secKey);
        return HttpService::post('http://api.fanyi.baidu.com/api/trans/vip/translate', $args);
    }


    /**
     * 翻译
     * @param $lists
     * @param $from
     * @param $to
     * @param string $title
     * @return array
     */
    public static function batchs($lists, $from, $to, string $title = ''): array
    {
        try {
            $qn = implode("\n", $lists);
            $keys = array_keys($lists);
            $translate = self::translate($qn, $from, $to);
            $up = [];
            if ($translate['code'] == 200 && isset($translate['content']['trans_result'])) {
                foreach ($translate['content']['trans_result'] as $key => $item) {
                    $up[$keys[$key]] = $item['dst'];
                }
                Setting::lang($up, $to, $title);
            } else {
                throw new Exception('翻译失败');
            }
            $data['message'] = '翻译' . count($up) . '组';
            $data['code'] = 0;
        } catch (\Exception $e) {
//				Db::rollback();
            $data['code'] = 1;
            $data['message'] = $e->getMessage();
        }
        return $data;
    }


    /**
     * 翻译
     * @param $lists
     * @param $from
     * @param $to
     * @param string $title
     * @return array
     */
    public static function fileTo(): array
    {
//			try {

        $lists = config('en');


        $qn = implode("\n", $lists);
        $keys = array_keys($lists);
//            dump($lists);
//            dump($keys);
        dump($qn);
        exit();
        $translate = self::translate($qn, 'en', 'tr');
        $up = [];
        if ($translate['code'] == 200 && isset($translate['content']['trans_result'])) {
            foreach ($translate['content']['trans_result'] as $key => $item) {
                $up[$keys[$key]] = $item['dst'];
            }
            Setting::lang($up, 'tr', 'tr');
        } else {
            throw new Exception('翻译失败');
        }
        $data['message'] = '翻译' . count($up) . '组';
        $data['code'] = 0;
//			} catch (\Exception $e) {
////				Db::rollback();
//				$data['code'] = 1;
//				$data['message'] =$e->getMessage();
//			}
        return $data;
    }

    public static function fileToP(): array
    {
//			try {

        $file = 'saniye
saniyede yeniden gönder
Şimdi imzalanmıştır
Birleşik ödül
binding
Enerji tüketimi
Değerlendirme alın
ayarlandır
Lütfen ödeme verici yükleyin
Lütfen koleksiyonu QR kodunu yükleyin
Lütfen doğru ödeme vericilerini yükleyin, kötü yükleyin yanlış vericilerini, sürekli mühür işleme!
Lütfen yeni ikinci parolanı tekrar girin
Lütfen yeni parolanı tekrar girin
Lütfen girin.
Lütfen transaksyon parolanı girin ~
Please enter your password
Please enter your mobile phone number
Lütfen dalının adını girin
Lütfen payee adını girin
Lütfen yeni ikinci bir parola girin
Lütfen yeni bir parola girin
Bir kullanıcı adını gir
Lütfen hesap numarasını girin
Please enter the verification code
Lütfen miktarı seçin
hesap numarası
hesap numarası:
Hesap İsmi:
Account type:
Depozit Bankası
bir randevu yap
Kontrol Kodu
Ödeme yöntemini değiştir
Wechat ödemesi
Değiştirmeyi doğrula
Lütfen yeni ödeme parolanı tekrar girin
Lütfen yeni ödeme parolanı girin (6 rakam)
Lütfen banka kartı hesabı numarasını girin
Gelişim, şu anki ABD dolar sayısının yerine getirilmesi üzere.';


        $lists = config('en');
//                $to = explode("\n",$lists);
        $qn = explode("\r\n", $file);
        $new = [];
        foreach ($qn as $item) {

            if (trim($item)) {
                $new[] = $item;
            }
        }

        $keys = array_keys($lists);

        $up = [];

            foreach ($new as $key => $item) {
                $up[$keys[$key]] = $item;
            }
            Setting::lang($up, 'tr', 'tr');

        $data['message'] = '翻译' . count($up) . '组';
        $data['code'] = 0;
//			} catch (\Exception $e) {
////				Db::rollback();
//				$data['code'] = 1;
//				$data['message'] =$e->getMessage();
//			}
        return $data;
    }


    /**
     * 补充翻译
     * @param string $lang
     * @param int $limit
     * @return array
     */
    public static function batch(string $lang = 'en_us', int $limit = 500): array
    {
        try {
//				Db::startTrans();
            $lists = LangModel::where('status', 1)->order($lang, '')->limit($limit)->column('zh_cn');
            $qn = implode("\n", $lists);
            $to = '';
            foreach (self::$lang_file as $key => $item) {
                if ($item['db'] == $lang) {
                    $to = $item['translate'];
                }
            }
            if (!$to) {
                throw new Exception('标记异常');
            }
            $translate = self::translate($qn, 'zh', $to);
            if ($translate['code'] == 200 && isset($translate['content']['trans_result'])) {
                foreach ($translate['content']['trans_result'] as $item) {
                    LangModel::where('status', 1)->where('zh_cn', $item['src'])->save([$lang => $item['dst']]);
                }
            } else {
                throw new Exception('翻译失败');
            }
//				Db::commit();
            $data['message'] = '';
            $data['code'] = 0;
        } catch (\Exception $e) {
//				Db::rollback();
            $data['code'] = 1;
            $data['message'] = $e->getMessage();
        }
        return $data;
    }


    /**
     * 保存多语言文件
     */
    public static function saveLang()
    {
        $lists = LangModel::where('status', 1)->order('name')->select();
        foreach (self::$lang_file as $key => $item) {
            $up = [];
            foreach ($lists as $lang) {
                $up[$lang['name']] = $lang[$item['db']];
            }
            if (count($up)) {
                Setting::lang($up, $key, $item['title']);
            }
        }
        return true;
    }

}
